코딩테스트 연습 - 크기가 작은 부분 문자열 | 프로그래머스 스쿨

[ 템플릿 코드 ]

#include <string>
#include <vector>
 
using namespace std;
 
int solution(string t, string p) {
    int answer = 0;
    return answer;
}

[ 풀이 ]

#include <string>
using namespace std;
 
int solution(string t, string p)
{
    int answer = 0;
    int len = p.length();
 
    for(int i = 0; i <= t.length() - len; i++)
    {
        string sub = "";
 
        for(int j = i; j < i + len; j++)
        {
            sub += t[j];
        }
 
        if(sub <= p)
        {
            answer++;
        }
    }
 
    return answer;
}

[ 해설 ]

#include <string>
using namespace std;
 
int solution(string t, string p)
{
    // 조건을 만족하는 부분 문자열의 개수를 저장
    int answer = 0;
 
    // p의 길이 저장
    // 예) p = "271" 이면 len = 3
    int len = p.length();
 
    // 부분 문자열의 시작 위치를 하나씩 이동
    // 예) t = "3141592", len = 3
    // 시작 위치는 0, 1, 2, 3, 4 까지 가능
    for(int i = 0; i <= t.length() - len; i++)
    {
        // 부분 문자열을 저장할 빈 문자열 생성
        string sub = "";
 
        // 현재 위치(i)부터 len개의 문자를 직접 붙여서
        // 부분 문자열 생성
        //
        // 예)
        // i = 0 이면
        // t[0] = '3'
        // t[1] = '1'
        // t[2] = '4'
        //
        // 결과 : sub = "314"
        for(int j = i; j < i + len; j++)
        {
            // 현재 문자를 문자열 뒤에 추가
            sub += t[j];
        }
 
        // 만들어진 부분 문자열이 p보다 작거나 같은지 비교
        //
        // 예)
        // sub = "141"
        // p   = "271"
        //
        // "141" <= "271" 이므로 참
        if(sub <= p)
        {
            // 조건을 만족하면 개수 증가
            answer++;
        }
    }
 
    // 최종 개수 반환
    return answer;
}

[ 타 답안 ]

#include <string>
 
int solution(std::string t, std::string p) {
    int answer = 0;
 
    // 시작 위치(i)를 한 칸씩 이동하며 검사
    for(int i = 0; i <= t.size() - p.size(); i++)
    {
        // substr(시작위치, 글자수)
        // 현재 위치(i)부터 p의 길이만큼 문자열을 잘라냄
        //
        // 예)
        // t = "3141592"
        // p = "271" (길이 3)
        //
        // i = 0 -> t.substr(0, 3) -> "314"
        // i = 1 -> t.substr(1, 3) -> "141"
        // i = 2 -> t.substr(2, 3) -> "415"
        // i = 3 -> t.substr(3, 3) -> "159"
        // i = 4 -> t.substr(4, 3) -> "592"
        //
        // 잘라낸 부분 문자열이 p보다 작거나 같으면
        // true(1), 아니면 false(0)
        answer += (t.substr(i, p.size()) <= p);
    }
 
    return answer;
}

C++ CodingTest